package com.okami.java8.stream;

/**
 * @description:
 * @author: TanJingyu
 * @create: 2020-09-15 16:06
 **/
import java.util.stream.*;
public class Fibonacci {
    int x = 1;

    /**
     *  iterate需要两个参数，一个是种子，作为流的第一个元素，同时被传入第二个参数（方法）中
     *  第二个参数是一个函数式接口，接收第一个参数（种子），进行响应逻辑处理后，返回成为下一轮的种子并存储到流中
     */
    Stream<Integer> numbers() {
        return Stream.iterate(0, i -> {
            int result = x + i;
            x = i;
            return result;
        });
    }

    public static void main(String[] args) {
        new Fibonacci().numbers()
                // 过滤前 20 个
//                .skip(20)
                // 然后取 10 个
                .limit(10)
                .forEach(System.out::println);
    }
}
